GtkCellRendererAccel: Try harder to capture bound keys
authorMatthias Clasen <mclasen@redhat.com>
Sun, 7 Sep 2014 00:56:03 +0000 (20:56 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 7 Sep 2014 00:56:03 +0000 (20:56 -0400)
Add a grab on the editable widget, so that we can capture
also shortcuts which are bound in the application itself.

https://bugzilla.gnome.org/736203

gtk/gtkcellrendereraccel.c

index eb660f5664b689bcc8e5aa7a98311ba370cddcf3..60f52c8b81935f22af726d4cda7fa55d6cc4d8fc 100644 (file)
@@ -519,7 +519,7 @@ gtk_cell_renderer_accel_start_editing (GtkCellRenderer      *cell,
   gtk_container_add (GTK_CONTAINER (eventbox), label);
 
   gtk_widget_show_all (eventbox);
-  gtk_widget_grab_focus (eventbox);
+  gtk_grab_add (eventbox);
 
   return GTK_CELL_EDITABLE (eventbox);
 }
@@ -659,6 +659,7 @@ gtk_cell_editable_event_box_key_press_event (GtkWidget   *widget,
   edited = TRUE;
 
  out:
+  gtk_grab_remove (box);
   gtk_cell_renderer_accel_ungrab (GTK_CELL_RENDERER_ACCEL (box->cell));
   gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget));
   gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (widget));
@@ -677,24 +678,12 @@ gtk_cell_editable_event_box_unrealize (GtkWidget *widget)
 {
   GtkCellEditableEventBox *box = (GtkCellEditableEventBox*)widget;
 
+  gtk_grab_remove (box);
   gtk_cell_renderer_accel_ungrab (GTK_CELL_RENDERER_ACCEL (box->cell));
   
   GTK_WIDGET_CLASS (gtk_cell_editable_event_box_parent_class)->unrealize (widget); 
 }
 
-static gboolean
-gtk_cell_editable_event_box_focus_out (GtkWidget     *widget,
-                                       GdkEventFocus *event)
-{
-  GtkCellEditableEventBox *box = (GtkCellEditableEventBox*)widget;
-
-  gtk_cell_renderer_accel_ungrab (GTK_CELL_RENDERER_ACCEL (box->cell));
-  gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget));
-  gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (widget));
-
-  return FALSE;
-}
-
 static void
 gtk_cell_editable_event_box_set_property (GObject      *object,
                                           guint         prop_id,
@@ -767,7 +756,6 @@ gtk_cell_editable_event_box_class_init (GtkCellEditableEventBoxClass *class)
 
   widget_class->key_press_event = gtk_cell_editable_event_box_key_press_event;
   widget_class->unrealize = gtk_cell_editable_event_box_unrealize;
-  widget_class->focus_out_event = gtk_cell_editable_event_box_focus_out;
 
   g_object_class_override_property (object_class,
                                     PROP_EDITING_CANCELED,